home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / Projects / Neurons / Supplying Neural Parameters < prev   
Lisp/Scheme  |  1998-10-26  |  2KB  |  68 lines

  1. Sorry, this is not possible.
  2.  
  3. (defun symbol-adjust (n &rest l)
  4.   (def-neuron chsyocd
  5.     (all-in 1 '(a a) 0 26 -1)
  6.     (transpose-one-symbol (in 1 0) n)
  7.     (otherwise (in 1 0)))
  8.   (apply 'run-neuron 'chsyoch l))
  9.  
  10. Why? The neuron definition cannot contain variables.
  11. Why not? When the activated neuron is conjugating its rules
  12. and when a rule is fired (transpose-one-symbol (in 1 0) n)
  13. is evaluated with (eval ...) which cannot know that n is
  14. bound to a value. How to bound n to a value? There is a
  15. solution, which is a dirty one:
  16.  
  17. (defvar n nil)     ; make a global variable
  18.  
  19. (defun testfun (variable &rest l)
  20.   (def-neuron test1
  21.     (in 1 'a)
  22.     (transpose-one-symbol (in 1 0) n) ; use here the global variable
  23.     (otherwise '=)
  24.   )
  25.   (setq n variable) ; set n to contain the variable used in the function
  26.   (apply 'run-neuron 'test1 l)) ; now this should execute properly
  27.  
  28. ; test it
  29.  
  30. (testfun 1 '(a b a a))
  31. --> (b = b b) ; only symbol a is transposed
  32.  
  33. This is a dirty solution since it uses a global variable as
  34. a passway, and if you are using recursive neuron calls the
  35. values get mixed up. But as neuron recursion is not allowed
  36. you may use this, but remember not to use same global parameters
  37. in more that one neuron, or use and the results would be
  38. quite interesting, far from illogical, though difficult to
  39. trace back. (I heard once a very natural sounding piece of
  40. music. Then the creator said it was a software mistake he
  41. could not replicate when he got the algorithm working properly
  42. ...)
  43.  
  44. Better solution would be to define neuron-apply
  45. function, which pushes the variable into the neural environmental
  46. bindings, and define neuron-eval which is used to evaluate
  47. all rules so that it first checks if environmental variables
  48. exist in the fire-rules, and if so, replace the variables with
  49. the values and evaluate the newly created function with standard
  50. eval. 
  51.  
  52. Your function:
  53.  
  54. (defvar n nil) 
  55.  
  56. (defun symbol-adjust (variable &rest l)
  57.   (def-neuron chsyocd
  58.     (all-in 1 '(a a) 0 26 -1)
  59.     (transpose-one-symbol (in 1 0) n)
  60.     (otherwise (in 1 0)))
  61.   (setq n variable) 
  62.   (apply 'run-neuron 'chsyocd l))
  63.  
  64. (symbol-adjust -1 '(a a b b c d))
  65. --> (a -b b a c d)
  66.  
  67. That finds a same-sequence-2 and transposes the second one -1.
  68.